<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/7/26
 * Time: 11:11
 */
//我们为了做测试看耗时的区别，头和尾都输出个时间
echo "进程开始时间：" . date("Ymd H:i:s") . PHP_EOL;

$workers = array();
$urls = array(
    'http://baidu.com',
    'http://sina.com.cn',
    'http://qq.com',
    'http://baidu.com?search=tommy',
    'http://baidu.com?search=shaolingyi',
    'http://baidu.com?search=zhoujielun',
);

/*
//常规情况下，我们是这样去循环获取这6个网站的页面内容
//时间就是6个加起来的时间消耗
foreach ($urls as $url) {
    $contents[] = $file_get_contents($url);
}
*/

//开启子进程，让他们每个子进程个自去获取页面内容
for ($i = 0; $i < count($urls); $i++) {
    //开启子进程
    $process = new swoole_process(function (swoole_process $worker) use ($i, $urls) {
        // 每个子进程去执行获取curl页面内容
        $content = curlData($urls[$i]);
        //这里由于回调函数后面是true，所以这个输出是不会到控制台的，而是
        //到进程之间的管道中。
        //echo $content . PHP_EOL;
        //也可以用swoole的方法，把内容放入管道中
        $worker->write($content . PHP_EOL);

    }, true);
    $pid = $process->start();
    $workers[$pid] = $process;
}

//从管道中循环输出这个值,workers中保存了所有子进程。
foreach ($workers as $process) {
    //从管道中拿出来内容
    echo $process->read();
}

//模拟获取页面内容
function curlData($url)
{
    //curl获取内容哦，file_get_contents
    //这里就做个模拟
    sleep(5);
    return $url . "这里是模拟的内容" . PHP_EOL;
}

echo "进程结束时间：" . date("Ymd H:i:s") . PHP_EOL;